1. Field of Invention
This invention pertains to error correction systems, including but not limited to error correction systems which utilize CRC checking features.
2. Related Art and Other Considerations
Information storage devices, such as disk drives, generally have error correction capability. Information transduced from the device is typically stored in a buffer in the form of bytes. The stored information is usually formatted into a plurality of blocks of bytes. For a CD disk drive, for example, the buffer contains a plurality of sectors (when processing computer data) or frames (when processing digital audio data), collectively referred to herein as blocks.
In accordance with the error correction capability, each sector typically has a plurality of (Cyclical Redundancy Check) or EDAC (Error Detection and Correction) check bytes. FIG. 2 illustrates a block grouped into 86 columns of 26 bytes each. Within the block, each column of bytes comprises a column codeword, the last two bytes of each column constituting an ECC portion of the column codeword and the remaining (i.e., first 24 bytes) of each column constituting a data portion of the column codeword. For example, bytes 0000, 0086, 0172, . . . , 1978 comprise a data portion of column codeword CW.sub.0 ; bytes 0001, 0087, 0173, . . . , 1979 comprise a data portion of column codeword CW1; and so forth. As illustrated in FIG. 2, the last four data bytes of each block (e.g., bytes 2060, 2061, 2062, 2063) contain error correction information and accordingly are known as EDC or CRC bytes. In some formats the CRC bytes are not necessarily the last bytes of the data portion of a block. For example, data formats which do not completely fill the blocks of FIG. 2 can place the CRC bytes following the end of data and follow the CRC bytes with pad bytes of zeros until the blocks are filled.
Beyond the operation of the error correction polynomial, the CRC or EDC check bytes provide an additional measure of check. In general, the CRC bytes are generated by treating the data bytes (or bits, as the case may be) as coefficients of the byte-valued (or bit-valued) data polynomial D(x) and calculating D(x)x.sup.n-k mod G(x), where k is the number of data symbols, n-k is the number of CRC symbols, and G(x) is the CRC generator polynomial. For a compact disk (CD) drive, the CRC generator is bit valued.
Historically, a check of the buffer which utilizes the CRC or EDC bytes occurs after the buffer has been corrected. Specifically, during an error correction phase, bytes of the buffer are accessed as codewords and operated upon by an error correction polynomial. Operation of the error polynomial upon the codewords results in the generation of error pointers which specify bytes of the codeword which are erroneous, as well as error patterns to be used for correcting the bytes located by the pointers. After generation by the error pointers and error patterns, bytes in the buffer are accessed for the purpose of correcting the pointer-specified bytes.
Subsequent to the correction of the pointer-specified bytes, the buffer is again accessed for the special purpose of CRC or EDC check. During the CRC or EDC check, the polynomial made up of all bytes in the buffer (including the CRC bytes) are divided by the CRC generator polynomial. If the remainder is zero, accurate correction of the block is confirmed.
While the CRC or EDC features advantageously provide an additional level of data integrity assurance, the specially required access of the buffer for the CRC/EDC check decreases overall operating speed.